package com.ecommerce.dal.service;

import java.util.List;

import com.ecommerce.dal.entity.Client;
import com.ecommerce.dal.entity.ClientHistory;
import com.ecommerce.dal.entity.Company;
import com.ecommerce.dal.entity.Customer;
import com.ecommerce.dal.entity.Rank;

public interface IClientManagerService {
	/**
	 * @param Long clientID
	 * @return Client Object
	 */
	public Client retrieveClient(long clientId);
	/**
	 * @param String username
	 * @return spicific Client Object
	 */
	public Client retrieveClient(String clientUserName);
	/**
	 * @param Company company Object
	 * @param Rank rank Object
	 * @param Client client Object
	 * 
	 */
	public void saveClient(Client client);
	/**
	 * @return List of all Client Objects
	 */
	public List<Client> retrieveAllClients();
	/**
	 * @param Long clientID
	 * @return 0- running , 1- suspended , 2- stopped
	 */
	
	public int retrieveClientState(long clientId);
	/**
	 * @param Long membershipcardID
	 * @return the user of a specific MembershipCard
	 */
	public Client retrieveMembershipCardClient(long membershipcardId);
	/**
	 * @param String username
	 * @return 0- running , 1- suspended , 2- stopped
	 */
	public int retrieveClientState(String username);
	

	/**
	 * @param Long ClientID
	 * @return Rank Object
	 */
	public Rank retrieveClientRank(long clientId);
	/**
	 * @param String username
	 * @return Rank Object
	 */
	public Rank retrieveClientRank(String username);
	/**
	 * @param Long clientID
	 * @return ClientHistory Object
	 */
	public List<ClientHistory> retrieveClientHistory(long clientId);
	/**
	 * @param ClientHistory clientHistory Object
	 */
	public void saveClientHistory(ClientHistory clientHistory);
	/**
	 * @param String username
	 * @return ClientHistory Object
	 */
	public List<ClientHistory> retrieveClientHistory(String clientUserName);
	/**
	 * @param Long clientID
	 * @return Company Object
	 */
	public Company retrieveClientCompany(long clientId);
	/**
	 * @param String clientUserName
	 * @return Company Object
	 */
	public Company retrieveClientCompany(String clientUserName);
	
	/**
	 * 
	 * @return list of verified clients
	 */
	public List<Client> retrieveVerifiedClients();
	/**
	 * 
	 * @return list of non verified clients
	 */
	public List<Client> retrieveNonVerifiedClients();
	/**
	 * 
	 * @param clientId
	 * @return check to see if a certain client is verified or not
	 */
	public boolean isVerifiedClient(long clientId);
	
	
	void updateClient(Client client);
	void deleteClient(Client client);
	//to be removed
	boolean checkIfCustomer(long clientId);
	//to be removed
	boolean checkIfExists(long clientId);
	
	List<Client> retrieveSponsorClients() ;
}
